//package com.gonsin.ta.logic.proto;
//
//import com.gonsin.ta.logic.node.Node;
//import com.gonsin.ta.logic.node.groovy.GroovyNodeAdapter;
//import com.gonsin.ta.logic.parse.Chain;
//import com.gonsin.ta.logic.process.TaBus;
//import io.grpc.stub.StreamObserver;
//import org.apache.commons.lang3.StringUtils;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.stream.Collectors;
//
//public class TaCliServiceImpl extends TaCliServiceProtoGrpc.TaCliServiceProtoImplBase {
//
//    /**
//     * 获取流程脚本
//     */
//    @Override
//    public void searchChain(TaPageRequestProto request, StreamObserver<TaPageResultProto> responseObserver) {
//        List<Chain> chains = new ArrayList<>(TaBus.getChainMap().values());
//        chains = chains.stream().sorted((c0, c1) -> StringUtils.compare(c0.getChainId(), c1.getChainId()))
//                .collect(Collectors.toList());
//
//        int page = request.hasPage() ? request.getPage() : 0;
//        int count = request.hasCount() ? request.getCount() : Integer.MAX_VALUE;
//        int min = page * count;
//        int max = min + count;
//
//        ChainArrayProto.Builder array = ChainArrayProto.newBuilder();
//        for (int i = min; i < max; i++) {
//            if (i >= chains.size()) {
//                break;
//            }
//            Chain chain = chains.get(i);
//            array.addChains(
//                    ChainProto.newBuilder()
//                            .setId(chain.getChainId())
//                            .setFilename(chain.getFilename())
//                            .setContent(chain.getQlScript())
//                            .build());
//        }
//        responseObserver.onNext(
//                TaPageResultProto.newBuilder()
//                        .setChains(array.build())
//                        .build()
//        );
//        responseObserver.onCompleted();
//    }
//
//
//    /**
//     * 获取流程节点
//     */
//    @Override
//    public void searchNode(TaPageRequestProto request, StreamObserver<TaPageResultProto> responseObserver) {
//        List<Node> nodes = new ArrayList<>(TaBus.getNodeMap().values());
//        nodes = nodes.stream().sorted((c0, c1) -> StringUtils.compare(c0.getNodeId(), c1.getNodeId()))
//                .collect(Collectors.toList());
//
//        int page = request.hasPage() ? request.getPage() : 0;
//        int count = request.hasCount() ? request.getCount() : Integer.MAX_VALUE;
//        int min = page * count;
//        int max = min + count;
//
//        NodeArrayProto.Builder array = NodeArrayProto.newBuilder();
//        for (int i = min; i < max; i++) {
//            if (i >= nodes.size()) {
//                break;
//            }
//            Node node = nodes.get(i);
//            if (node instanceof GroovyNodeAdapter) {
//                GroovyNodeAdapter groovyNode = (GroovyNodeAdapter) node;
//                array.addChains(
//                        NodeProto.newBuilder()
//                                .setId(groovyNode.getNodeId())
//                                .setFilename(groovyNode.getNodeType().getCode())
//                                .setContent(groovyNode.getGroovyScript())
//                                .build());
//            } else {
//                array.addChains(
//                        NodeProto.newBuilder()
//                                .setId(node.getNodeId())
//                                .build());
//            }
//        }
//        responseObserver.onNext(
//                TaPageResultProto.newBuilder()
//                        .setNodes(array.build())
//                        .build()
//        );
//        responseObserver.onCompleted();
//    }
//
//
//    /**
//     * 更新流程脚本
//     */
//    @Override
//    public void updateChain(ChainArrayProto request, StreamObserver<TaPageResultProto> responseObserver) {
//
//    }
//
//
//    /**
//     * 添加或修改节点
//     */
//    @Override
//    public void addOrUpdateNode(NodeArrayProto request, StreamObserver<TaPageResultProto> responseObserver) {
//
//    }
//}
